﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Data.SqlClient;

namespace QuizzAdminData
{
    public static class SpelersDB
    {
        public static List<Speler> GetSpelers()
        {
            List<Speler> spelers = new List<Speler>();

            SqlConnection conn = QuizzAdminDB.GetConnection();

            string selectStatement = "SELECT * FROM Spelers";

            SqlCommand selectCmd = new SqlCommand(selectStatement, conn);

            try
            {
                conn.Open();
                SqlDataReader reader = selectCmd.ExecuteReader();
                Speler speler;
                while (reader.Read())
                {
                    speler = new Speler();

                    speler.Id = (int)reader["id"];
                    speler.Voornaam = reader["voornaam"].ToString();
                    speler.Familienaam = reader["familienaam"].ToString();
                    speler.Email = reader["email"].ToString();
                    speler.Adres = reader["adres"].ToString();
                    speler.Postcode = (int)reader["postcode"];
                    speler.Gemeente = reader["gemeente"].ToString();

                    spelers.Add(speler);
                }

                reader.Close();
            }
            catch (SqlException ex)
            {
                throw ex;
            }
            finally
            {
                conn.Close();
            }

            return spelers;
        }

        public static List<Speler> GetSpelerByTeamID(int teamID)
        {
            List<Speler> spelers = new List<Speler>();

            SqlConnection conn = QuizzAdminDB.GetConnection();

            string selectStatement = 
                "SELECT Spelers.* " +
                "FROM Spelers " +
                "JOIN Spelers_Teams " +
                "ON Spelers.id = Spelers_Teams.speler_id " +
                "JOIN Teams " +
                "ON Spelers_Teams.team_id = Teams.id " +
                "WHERE Teams.id = @teamID ";

            SqlCommand selectCmd = new SqlCommand(selectStatement, conn);

            try
            {
                conn.Open();
                selectCmd.Parameters.AddWithValue("teamID", teamID);
                SqlDataReader reader = selectCmd.ExecuteReader();
                Speler speler;
                while (reader.Read())
                {
                    speler = new Speler();

                    speler.Id = (int)reader["id"];
                    speler.Voornaam = reader["voornaam"].ToString();
                    speler.Familienaam = reader["familienaam"].ToString();
                    speler.Email = reader["email"].ToString();
                    speler.Adres = reader["adres"].ToString();
                    speler.Postcode = (int)reader["postcode"];
                    speler.Gemeente = reader["gemeente"].ToString();

                    spelers.Add(speler);
                }

                reader.Close();
            }
            catch (SqlException ex)
            {
                throw ex;
            }
            finally
            {
                conn.Close();
            }

            return spelers;
        }

        public static Speler GetSpelerByID(int id)
        {
            Speler speler = new Speler();

            SqlConnection conn = QuizzAdminDB.GetConnection();

            string selectStatement = "SELECT * FROM Spelers WHERE id=@id";

            SqlCommand selectCmd = new SqlCommand(selectStatement, conn);

            try
            {
                conn.Open();

                selectCmd.Parameters.AddWithValue("id", id);
                SqlDataReader reader = selectCmd.ExecuteReader();

                if (reader.Read())
                {
                    speler.Id = (int)reader["id"];
                    speler.Voornaam = reader["voornaam"].ToString();
                    speler.Familienaam = reader["familienaam"].ToString();
                    speler.Email = reader["email"].ToString();
                    speler.Adres = reader["adres"].ToString();
                    speler.Postcode = (int)reader["postcode"];
                    speler.Gemeente = reader["gemeente"].ToString();

                }

                reader.Close();
            }
            catch (SqlException ex)
            {
                throw ex;
            }
            finally
            {
                conn.Close();
            }

            return speler;
        }

        public static int GetLastRowID()
        {
            int spelerID = -1;

            SqlConnection conn = QuizzAdminDB.GetConnection();

            string selectStatement = "SELECT id FROM Spelers WHERE id=(SELECT MAX(id) FROM Spelers)";

            SqlCommand selectCmd = new SqlCommand(selectStatement, conn);

            try
            {
                conn.Open();

                SqlDataReader reader = selectCmd.ExecuteReader();

                if (reader.Read())
                {
                    spelerID = (int)reader["id"];

                }

                reader.Close();
            }
            catch (SqlException ex)
            {
                throw ex;
            }
            finally
            {
                conn.Close();
            }

            return spelerID;
        }

        public static int InsertSpeler(string voornaam, string familienaam, string email, string adres, string postcode, string gemeente)
        {
            SqlConnection conn = QuizzAdminDB.GetConnection();

            string sqlIns = "INSERT INTO Spelers (voornaam, familienaam, email, adres, postcode, gemeente) VALUES (@voornaam, @familienaam, @email, @adres, @postcode, @gemeente)";

            int ret = 0;

            try
            {
                conn.Open();

                SqlCommand cmdIns = new SqlCommand(sqlIns, conn);
                cmdIns.Parameters.AddWithValue("@voornaam", voornaam);
                cmdIns.Parameters.AddWithValue("@familienaam", familienaam);
                cmdIns.Parameters.AddWithValue("@email", email);
                cmdIns.Parameters.AddWithValue("@adres", adres);
                cmdIns.Parameters.AddWithValue("@postcode", postcode);
                cmdIns.Parameters.AddWithValue("@gemeente", gemeente);
                ret = cmdIns.ExecuteNonQuery();
                cmdIns.Dispose();
                cmdIns = null;
            }
            catch (Exception ex)
            {
                throw ex;
            }
            finally
            {
                conn.Close();
            }

            return ret;

        }

        public static int UpdateSpeler(int id, string voornaam, string familienaam, string email, string adres, string postcode, string gemeente)
        {
            SqlConnection conn = QuizzAdminDB.GetConnection();

            string sql = "UPDATE Spelers SET voornaam=@voornaam, familienaam=@familienaam, email=@email, adres=@adres, postcode=@postcode, gemeente=@gemeente WHERE id=@id";

            int ret = 0;

            try
            {
                conn.Open();

                SqlCommand cmd = new SqlCommand(sql, conn);
                cmd.Parameters.AddWithValue("@id", id);
                cmd.Parameters.AddWithValue("@voornaam", voornaam);
                cmd.Parameters.AddWithValue("@familienaam", familienaam);
                cmd.Parameters.AddWithValue("@email", email);
                cmd.Parameters.AddWithValue("@adres", adres);
                cmd.Parameters.AddWithValue("@postcode", postcode);
                cmd.Parameters.AddWithValue("@gemeente", gemeente);
                ret = cmd.ExecuteNonQuery();
                cmd.Dispose();
                cmd = null;
            }
            catch (Exception ex)
            {
                throw ex;
            }
            finally
            {
                conn.Close();
            }

            return ret;

        }

        //DB Speler tabel heeft "ON DELETE CASCADE" 
        //zo wordt de speler ook uit de Spelers_Teams tabel gewist met 1 enkele query
        public static void DeleteSpeler(int spelerID)
        {
            SqlConnection conn = QuizzAdminDB.GetConnection();

            string sql = 
                "DELETE FROM Spelers " +
                "WHERE id = @id";

            try
            {
                conn.Open();

                SqlCommand cmd = new SqlCommand(sql, conn);
                cmd.Parameters.AddWithValue("@id", spelerID);
                cmd.ExecuteNonQuery();
                cmd.Dispose();
                cmd = null;
            }
            catch (Exception ex)
            {
                throw ex;
            }
            finally
            {
                conn.Close();
            }
        }

    }
}
